#pragma once        

/*---------------------------------定义关于“缓冲区的宏”--------------------------------*/
//1.定义缓冲区的最大容量为1024字节，这是用户级缓冲区的大小上限
#define MAX 1024
//2.定义缓冲区刷新方式的宏，使用位运算表示不同的刷新策略（便于组合和判断）
#define NONE_FLUSH (1<<0)  // 无刷新：0001（仅作为标志位，实际中通常需要手动刷新）
#define LINE_FLUSH (1<<1)  // 行刷新：0010（遇到换行符时自动刷新缓冲区）
#define FULL_FLUSH (1<<2)  // 全缓冲：0100（缓冲区填满时自动刷新）


/*---------------------------------定义关于“文件的结构体”--------------------------------*/
//3.自定义文件结构体，模拟C标准库中的FILE结构体，封装文件操作所需的核心信息
typedef struct IO_FILE
{
    int file_no;          // 底层文件描述符 ---> 关联操作系统打开的文件（如：0:标准输入，1:标准输出，2:标准错误）
    int file_flag;        // 文件状态标志 ---> 可扩展用于表示：读写模式、错误状态

    char buffer_out[MAX]; // 输出缓冲区 ---> 用于暂存待写入文件的数据（用户级缓冲区）
    int buffer_len;       // 当前缓冲区中已存储的数据长度（字节数）
    int buffer_flush;     // 缓冲区刷新方式 ---> 取值为上面定义的NONE_FLUSH/LINE_FLUSH/FULL_FLUSH
}MyFile;  // 结构体别名，简化后续使用



/*---------------------------------定义关于“文件的操作”--------------------------------*/
//1.声明“自定义文件打开函数”---> 模拟fopen
MyFile* MyFopen(const char* path, const char* mode);

//2.声明“自定义文件关闭函数”---> 模拟fclose
void MyFclose(MyFile*);

//3.声明“自定义写入函数”---> 模拟fwrite
int MyFwrite(MyFile*, void* str, int len);


//4.声明“自定义缓冲区刷新函数”---> 模拟fflush
void MyFFlush(MyFile*);
